package cn.hinglo.gameclaw.admin.service;

import cn.hinglo.gameclaw.admin.dao.MenuClawDao;
import cn.hinglo.gameclaw.admin.entity.MenuClawEntity;
import cn.hinglo.gameclaw.data.entity.Result;
import cn.hinglo.gameclaw.data.utils.ResultUtils;
import cn.hinglo.gameclaw.user.bean.MenuClaw;
import cn.hutool.core.date.DateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * @createTime: 2018/1/8
 * @author: HingLo
 * @description: 娃娃机分类管理服务层
 */
@Service
@CacheConfig(cacheNames = "MenuClaw")
public class MenuClawService {
    private final MenuClawDao menuClawDao;

    @Autowired
    public MenuClawService(MenuClawDao menuClawDao) {
        this.menuClawDao = menuClawDao;
    }

    /**
     * 查找全部的娃娃机分类
     * <p>添加缓存,使用分类的ID作为Key</p>
     *
     * @param mid 分类的Id
     * @return 分类下的娃娃机集合
     */
    @Cacheable(key = "#mid")
    public List<MenuClawEntity> listMenuClawService(String mid) {
        //检测Id格式是否符合要求
        List<MenuClawEntity> list = menuClawDao.listMenuClawDao(mid);
        //排序规则
        return sortListService(list);
    }

    /**
     * 删除id的娃娃机分类
     * <p>如果该分类下删除了娃娃机并且删除成功就直接清理缓存</p>
     *
     * @param id 分类的下娃娃机的ID
     * @return 删除指定分类下的娃娃机
     */
    @CacheEvict(condition = "#result.code==200")
    public Result deleteMenuClawService(String id) {
        //检测Id格式是否符合要求
        return menuClawDao.deleteByPrimaryKey(id) > 0 ? ResultUtils.success() : ResultUtils.error("删除失败");
    }

    /**
     * 添加娃娃机
     * <p>如果该分类下添加了娃娃机就直接清理缓存</p>
     *
     * @param menuClaw 添加分类下的娃娃机
     * @return 添加结果
     */
    @CacheEvict(key = "#menuClaw.mid")
    public Result addMenuClawService(MenuClaw menuClaw) {
        menuClaw.setDate(new Date());
        return menuClawDao.insert(menuClaw) > 0 ? ResultUtils.success() : ResultUtils.error("添加失败");
    }


    /**
     * 对查询的结果按照指定的方式排序
     *
     * @param list 排序的集合
     * @return 返回排序结果
     */
    private List<MenuClawEntity> sortListService(List<MenuClawEntity> list) {
        //TODO:排序处理


        return list;
    }

    /**
     * 修改人工权重值,
     * <p>修改了后信息后就直接清理全部的缓存信息</p>
     *
     * @param id   分类下的娃娃机Id
     * @param sort 全中国
     * @param date 结束时间
     * @return 修改结果值
     */
    @CacheEvict(allEntries = true)
    public Result updateMenuClawService(String id, Integer sort, String date) {
        if (sort < 0) {
            return ResultUtils.error("权重值不能小于0");
        }
        Date date1 = DateUtil.parse(date);
        if (date1.getTime() < System.currentTimeMillis()) {
            return ResultUtils.error("有效期不能小于当前时间");
        }
        int result = menuClawDao.updateMenuClawDao(id, sort, date1);
        return result > 0 ? ResultUtils.success() : ResultUtils.error("修改失败");
    }
}
